// pages/list/index.js
import * as apis from "../../apis/index";
// 可以在这里存放非响应式（不需要setData，视图不用）的数据

Page({
  /**
   * 页面的初始数据
   */
  // 在这里也可以存放自定义的一些数据（和视图无关）
  limit: 10,
  page: 1,
  sort: "",
  category1Id: "",
  category2Id: "",
  keyword: "",
  items: [],
  pages: 1,
  // 请求的加载状态
  loading: false,
  data: {
    // limit: 10,
    // page: 1,
    // sort: "",
    // category1Id: "",
    // category2Id: "",
    // keyword: "",
    items: [],
    // pages: 1,
    // // 请求的加载状态
    // loading: false,
    //是否还有内容没有加载
    isMore: true,
  },

  /**
   * 生命周期函数--监听页面加载
   * options: 访问当前页面通过 url 的 querystrig 携带的数据，它是一个对象
   * /pages/list/index?category1Id=1&category2Id=2
   * options = {
   *  category1Id: 1,
   *  category2Id: 2
   * }
   */
  async findGoodsListByPage() {
    if (this.loading) {
      // 如果 loading 为 true ，表示有一个请求还在加载状态，此时我们应该直接return
      // 如果上一次还正在loading的请求page=2，这次我们把page+1了，因为loading为true，直接跳出了，所以page=3这次请求就没有发送，问题是当2的请求完以后以后，我们再次发送请求的时候page的值是从4开始的

      this.page = this.page - 1;

      return;
    }
    // 如果可以执行这里，表示可以发送请求，则把状态设置为 true，我们还得在这次请求完成了以后，把这个状态设置回 false

    this.loading = true;

    if (this.data.isMore) {
      try {
        const res = await apis.findGoodsListByPage({
          limit: this.limit,
          page: this.page,
          sort: this.sort,
          category1Id: this.category1Id,
          category2Id: this.category2Id,
          keyword: this.keyword,
        });
        this.setData({
          // 上拉加载更多的时候，请求的数据应该是累加的
          items: [...this.data.items, ...res.records],
          // 存储后端当前这次返回的 pages，用于后续的判断
          // 把loading 的状态设置为 false
          // loading: false,
          isMore: res.current < res.pages,
        });
        this.pages = res.pages;
      } catch (e) {
        // 还有记得请求失败了也要设置回 false
        // this.setData({
        //   loading: false,
        // });
      } finally {
        this.loading = false;
      }
    }
  },

  onLoad(options) {
    // console.log(options);

    this.sort = options.sort || "";
    this.category1Id = options.category1Id || "";
    this.category2Id = options.category2Id || "";
    this.keyword = options.keyword || "";
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {},

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    this.findGoodsListByPage();
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {},

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {},

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {},

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {
    // 1、修改 page 的值

    this.page = this.page + 1;
    // 2、发送新的请求获取新的 page 对应数据
    this.findGoodsListByPage();
  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {},
});
